home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 2.3 / ScrollBars-RHS-NonFlapping.st < prev    next >
Text File  |  1993-07-24  |  18KB  |  624 lines

  1. "    NAME        Right-sidedNon-flappingScrollBars
  2.     AUTHOR        Bernard Horan <bernardh@cs.man.ac.uk>
  3.     CONTRIBUTOR    Bernard Horan <bernardh@cs.man.ac.uk>
  4.     FUNCTION     persistent scroll bars enclosed in view at RHS
  5.     ST-VERSIONS    2.3 & Analyst
  6.     PREREQUISITES     
  7.     CONFLICTS     
  8.     DISTRIBUTION    global
  9.     VERSION        1.0
  10.     DATE        October 1990
  11.     SUMMARY        A horrible series of hacks to override the existing
  12. implementation of ScrollBars.  If the rumours are correct, soon to be
  13. superseded by Smalltalk-80 release 4. [Was it worth it?].  After
  14. filing in the changes, make sure that you close all windows to reset
  15. all the instances of subclasses of ScrollController lying around.  
  16. Please report all bugs to me.
  17. "!
  18.  
  19. 'From Smalltalk-80, Version 2.3 of 13 June 1988 on 12 October 1990 at 1:06:51 pm'!
  20.  
  21.  
  22.  
  23. !TextView methodsFor: 'displaying'!
  24.  
  25. display
  26.     "Show the text of the receiver on the display screen."
  27.     "Use my clippingBox to determine wrappingBox and the clippingBox (rather than the insetDisplayBox)
  28.     BH - 14 March 1990"
  29.  
  30.     self isUnlocked
  31.         ifTrue: 
  32.             [self controller
  33.                 wrappingBox: (self clippingBox insetBy: 6 @ 0)
  34.                 clippingBox: self clippingBox.
  35.             (controller text isEmpty and: [controller textHasChanged not])
  36.  
  37.  
  38.                 ifTrue: [self newText: self getText]].
  39.     super display!
  40.  
  41. displayView
  42.     "Also display the scrollBar and the marker
  43.     BH - 14 March 1990"
  44.  
  45.     self topView isCollapsed ifFalse: [
  46.         self clearInside.
  47.         self controller display ].
  48.     self displayScrollBar.
  49.     self displayScrollMarker! !
  50.  
  51. !TextView methodsFor: 'scrolling hacks'!
  52.  
  53. clippingBox
  54.     "return the clippingBox (not including the scrollarea)
  55.     BH - 14 March 1990"
  56.     ^ self insetDisplayBox insetBy: self scrollBarInset!
  57.  
  58. compositionBox
  59.     "Return the compositionBox for the paragraph
  60.     BH - 14 March 1990"
  61.     ^ (self insetDisplayBox insetBy: self paragraphInset) insetBy: self scrollBarInset!
  62.  
  63. displayScrollBar
  64.     "Display the scroll bar
  65.     BH - 14 March 1990"
  66.     controller scrollBar displayOn: Display!
  67.  
  68. displayScrollMarker
  69.     "display the scrollBar marker
  70.     BH - 14 March 1990"
  71.     controller marker displayOn: Display.
  72.     controller moveMarker!
  73.  
  74. scrollBarInset
  75.     "return the scroll bar inset
  76.     BH - 14 March 1990"
  77.     ^ 0@0 corner: self controller scrollBarWidth@0! !
  78.  
  79. !DisplayTextView reorganize!
  80. ('initialize-release' initialize)
  81. ('accessing' centered editParagraph: isCentered mask mask: rule rule:)
  82. ('controller access' defaultController defaultControllerClass)
  83. ('window access' defaultWindow window:)
  84. ('model access' model:)
  85. ('displaying' display displayView)
  86. ('deEmphasizing' deEmphasizeView)
  87. ('private' centerText defaultMask defaultRule paragraphInset positionText)
  88. !
  89.  
  90.  
  91.  
  92. !StringHolderView methodsFor: 'displaying'!
  93.  
  94. displayView
  95.     "also display the scrollBar and the scrollBar marker
  96.     BH - 14 March 1990"
  97.     self clearInside.
  98.     (self controller isKindOf: TextEditor)
  99.         ifTrue: [controller display]
  100.         ifFalse: [displayContents display].
  101.     self displayScrollBar.
  102.     self displayScrollMarker!
  103.  
  104. positionDisplayContents
  105.     "Presumably the text being displayed changed so that the wrapping 
  106.     box and clipping box should be reset."
  107.     "Use my clippingBox rather than my insetDisplayBox to get the area 
  108.     in which the displayCOntents should be displayed 
  109.     BH - 14 March 1990"
  110.  
  111.     | displayBox translation |
  112.     displayBox _ self clippingBox.
  113.     displayBox extent = displayContents clippingRectangle extent
  114.         ifTrue: 
  115.             [translation _ displayBox origin - displayContents clippingRectangle origin.
  116.             displayContents clippingRectangle: displayBox.
  117.             displayContents setCompositionRectangle: (displayContents compositionRectangle translateBy: translation)]
  118.         ifFalse: [displayContents recomposeIn: (displayBox insetBy: self paragraphInset)
  119.                 clippingBox: displayBox]! !
  120.  
  121. !StringHolderView methodsFor: 'model access'!
  122.  
  123. editString: aString 
  124.     "The paragraph to be displayed is created from the characters in 
  125.     aString. "
  126.     "Use my clippingBox to get the clippingBox of the displayContents, 
  127.     and use my compositionBox to determine its compositionBox, rather 
  128.     than the insetDisplayBox, since I need to take into account the area 
  129.     of the scrollBar 
  130.     BH - 13 March 1990"
  131.  
  132.     displayContents _ TextCompositor
  133.                 withText: aString asText
  134.                 style: TextStyle default copy
  135.                 compositionRectangle: self compositionBox
  136.                 clippingRectangle: self clippingBox.
  137.     (self controller isKindOf: TextEditor)
  138.         ifTrue: [controller changeCompositor: displayContents]! !
  139.  
  140. !StringHolderView methodsFor: 'private'!
  141.  
  142. paragraphInset
  143.     "Answer the amount to inset the paragraph from the border"
  144.     ^6@0! !
  145.  
  146. !StringHolderView methodsFor: 'scrolling hacks'!
  147.  
  148. clippingBox
  149.     "return the clippingBox of the view
  150.     BH - 14 March 1990"
  151.     ^ self insetDisplayBox insetBy: self scrollBarInset!
  152.  
  153. compositionBox
  154.     "return the compostionBox of the view
  155.     BH - 14 March 1990"
  156.     ^ (self insetDisplayBox insetBy: self paragraphInset) insetBy: self scrollBarInset!
  157.  
  158. displayScrollBar
  159.     "display the scrollbar
  160.     BH - 14 March 1990"
  161.     controller scrollBar displayOn: Display!
  162.  
  163. displayScrollMarker
  164.     "display the scrollBar marker
  165.     BH - 14 March 1990"
  166.     controller marker displayOn: Display.
  167.     controller moveMarker!
  168.  
  169. scrollBarInset
  170.     "return the inset for the scroll bar"
  171.     ^ 0@0 corner: self controller scrollBarWidth@0! !
  172. MouseMenuController subclass: #ScrollController
  173.     instanceVariableNames: 'scrollBar marker '
  174.     classVariableNames: 'HaltedScrollBar SavedArea ScrollBarWidth '
  175.     poolDictionaries: ''
  176.     category: 'Interface-Support'!
  177.  
  178.  
  179. !ScrollController methodsFor: 'initialize-release'!
  180.  
  181. initialize
  182.     super initialize.
  183.     scrollBar _ Quadrangle new.
  184.     scrollBar borderWidthLeft: 1 right: 0 top: 2 bottom: 2.
  185.     marker _ Quadrangle new.
  186.     marker insideColor: Form gray! !
  187.  
  188. !ScrollController methodsFor: 'basic control sequence'!
  189.  
  190. controlInitialize
  191.     "Don't do anything more than my super
  192.     BH - 14 March 1990"
  193.     super controlInitialize!
  194.  
  195. controlTerminate
  196.     "Don't do anything more than my super.
  197.     BH - 14 March 1990"
  198.     super controlTerminate!
  199.  
  200. newcontrolInitialize
  201.     "The scrollbar has a two-pixel border, and for alignment it assumes that this sub-view
  202.     has a one-pixel border and shares another one-pixel border from its neighbor/super view"
  203.     "super controlInitialize.Z"
  204.     self scrollBar.
  205.     self marker.
  206.     "scrollBar region: (0@0 extent: 15 @ (view displayBox height + 2)).
  207.     marker region: self computeMarkerRegion.
  208.     scrollBar _ scrollBar align: scrollBar topRight with: view displayBox topRight + (0@ -1).
  209.     marker _ marker align: marker topCenter with: scrollBar inside topCenter.
  210.     self class getSavedAreaFor: scrollBar.
  211.     scrollBar displayOn: Display.
  212.     self moveMarker"!
  213.  
  214. oldcontrolInitialize
  215.     "The scrollbar has a two-pixel border, and for alignment it assumes that this sub-view
  216.     has a one-pixel border and shares another one-pixel border from its neighbor/super view"
  217.     "super controlInitialize.Z"
  218.     scrollBar region: (0@0 extent: 15 @ (view displayBox height + 2)).
  219.     marker region: self computeMarkerRegion.
  220.     scrollBar _ scrollBar align: scrollBar topRight with: view displayBox topRight + (0@ -1).
  221.     marker _ marker align: marker topCenter with: scrollBar inside topCenter.
  222.     self class getSavedAreaFor: scrollBar.
  223.     scrollBar displayOn: Display.
  224.     self moveMarker! !
  225.  
  226. !ScrollController methodsFor: 'scrolling'!
  227.  
  228. newscroll
  229.     "Only absolute scrolling now allowed - BH - 5 September 1989"
  230.  
  231.     | savedCursor regionPercent |
  232.     savedCursor _ sensor currentCursor.
  233.     [self scrollBarContainsCursor]
  234.         whileTrue: 
  235.             [Processor yield.
  236.             self changeCursor: Cursor marker.
  237.             (Sensor anyButtonPressed) ifTrue:[self scrollAbsolute]].
  238.     savedCursor show!
  239.  
  240. oldscroll
  241.     "Check to see whether the user wishes to jump, scroll up, or scroll down."
  242.  
  243.     | savedCursor regionPercent |
  244.     savedCursor _ sensor currentCursor.
  245.     [self scrollBarContainsCursor]
  246.         whileTrue: 
  247.             [Processor yield.
  248.             regionPercent _ 100 * (sensor cursorPoint x - scrollBar left) // scrollBar width.
  249.             regionPercent <= 40
  250.                 ifTrue: [self scrollDown]
  251.                 ifFalse: [regionPercent >= 60
  252.                             ifTrue: [self scrollUp]
  253.                             ifFalse: [self scrollAbsolute]]].
  254.     savedCursor show!
  255.  
  256. oldscrollAmount
  257.     "Answer the number of bits of y-coordinate should be scrolled.  This is a 
  258.     default determination based on the view's preset display transformation."
  259.  
  260.     ^((view inverseDisplayTransform: sensor cursorPoint)
  261.         - (view inverseDisplayTransform: scrollBar inside topCenter)) y!
  262.  
  263. scroll
  264.     "Check to see whether the user wishes to jump, scroll up, or scroll  
  265.     down."
  266.     "BH - 12 October 1990"
  267.  
  268.     | savedCursor |
  269.     savedCursor _ sensor currentCursor.
  270.     [self scrollBarContainsCursor]
  271.         whileTrue: 
  272.             [Processor yield.
  273.             self changeCursor: Cursor scroll.
  274.             Sensor anyButtonPressed ifTrue: [sensor cursorPoint y < marker top
  275.                     ifTrue: 
  276.                         [self scrollDown.
  277.                         [Sensor anyButtonPressed]
  278.                             whileTrue: 
  279.                                 [self scrollView: 1.
  280.                                 self moveMarker]]
  281.                     ifFalse: [sensor cursorPoint y > marker bottom
  282.                             ifTrue: 
  283.                                 [self scrollUp.
  284.                                 [Sensor anyButtonPressed]
  285.                                     whileTrue: 
  286.                                         [self scrollView: -1.
  287.                                         self moveMarker]]
  288.                             ifFalse: [self scrollAbsolute]]]].
  289.     savedCursor show!
  290.  
  291. scrollAmount
  292.     ^(sensor cursorPoint - marker center) y abs! !
  293.  
  294. !ScrollController methodsFor: 'marker adjustment'!
  295.  
  296. computeMarkerRegion
  297.     "Answer the rectangular area in which the gray area of the scroll bar
  298.     should be displayed."
  299.     "BH - 15 March 1990"
  300.  
  301.     ^0@0 extent: (self scrollBarWidth - 5) @
  302.             ((view window height asFloat /
  303.                         view boundingBox height *
  304.                             scrollBar inside height)
  305.                  rounded min: scrollBar inside height)! !
  306.  
  307. !ScrollController methodsFor: 'private'!
  308.  
  309. scrollAbsolute
  310.     "Different cursor"
  311.     "BH - 12 October 1990"
  312.     | oldMarker |
  313.     self changeCursor: Cursor upDown.
  314.     self canScroll & sensor anyButtonPressed ifTrue:
  315.         [[sensor anyButtonPressed] whileTrue:
  316.             [oldMarker _ marker.
  317.             marker _ marker translateBy:
  318.                 0@((sensor cursorPoint y - marker center y min:
  319.                     scrollBar inside bottom - marker bottom) max: scrollBar inside top - marker top).
  320.             (oldMarker areasOutside: marker), (marker areasOutside: oldMarker) do:
  321.                 [:region | Display fill: region rule: Form reverse mask: Form gray].
  322.             self scrollView].
  323.         scrollBar display.
  324.         self moveMarker]!
  325.  
  326. scrollDown
  327.     "Different cursor, continuous scrolling"
  328.     "BH - 12 October 1990"
  329.  
  330.     self canScroll
  331.         ifTrue: 
  332.             [self changeCursor: Cursor up.
  333.             self scrollViewDown.
  334.             self moveMarker]!
  335.  
  336. scrollUp
  337.     "Different cursor, continuous scrolling"
  338.     "BH - 12 October 1990"
  339.  
  340.     self canScroll
  341.         ifTrue: 
  342.             [self changeCursor: Cursor down.
  343.             self scrollViewUp.
  344.             self moveMarker]! !
  345.  
  346. !ScrollController methodsFor: 'scrolling hacks'!
  347.  
  348. marker
  349.     "BH - 14 March 1990"
  350.     marker region: self computeMarkerRegion.
  351.     ^ marker _ marker align: marker topCenter with: scrollBar inside topCenter!
  352.  
  353. scrollBar
  354.     "BH - 14 March 1990"
  355.     scrollBar region: (0@0 extent: self scrollBarWidth @ (view displayBox height + 2)).
  356.     ^ scrollBar _ scrollBar align: scrollBar topRight with: view displayBox topRight + (0@ -1)!
  357.  
  358. scrollBarWidth
  359.     "BH - 14 March 1990"
  360.     ^ self class scrollBarWidth! !
  361.  
  362.  
  363. !ListController methodsFor: 'scrolling'!
  364.  
  365. oldscrollAmount
  366.     ^sensor cursorPoint y - scrollBar inside top!
  367.  
  368. scrollAmount
  369.     ^super scrollAmount! !
  370.  
  371.  
  372. !Cursor class methodsFor: 'constants'!
  373.  
  374. scroll
  375.     "Answer the instance of the receiver that is up and down arrows."
  376.  
  377.     ^ (self classVarNames includes: #UpDownCursor) 
  378.             ifTrue:[UpDownCursor]
  379.             ifFalse:[ScrollCursor]!
  380.  
  381. upDown
  382.     ^ self scroll! !
  383.  
  384.  
  385. !FillInTheBlankView methodsFor: 'scrolling hack'!
  386.  
  387. displayView
  388.     "do not diaply scroll bar or marker"
  389.     "BH - 12 October 1990"
  390.     self clearInside.
  391.     (self controller isKindOf: TextEditor)
  392.         ifTrue:[controller display]
  393.         ifFalse:[displayContents display]! !
  394.  
  395.  
  396. !FillInTheBlankView class methodsFor: 'instance creation'!
  397.  
  398. on: aFillInTheBlank message: messageString displayAt: originPoint centered: centered useCRController: useCRController
  399.  
  400.     | topView messageView answerView |
  401.     messageView _ self buildMessageView: messageString.
  402.     answerView _ 
  403.         self buildAnswerView: aFillInTheBlank 
  404.             frameWidth: messageView window width.
  405.     useCRController ifTrue: [answerView controller: CRFillInTheBlankController new].
  406.     topView _ View new model: aFillInTheBlank.
  407.     topView controller: BinaryChoiceController new.
  408.     topView addSubView: messageView.
  409.     topView addSubView: answerView below: messageView.
  410.     topView align: (centered
  411.             ifTrue: [topView viewport center]
  412.             ifFalse: [topView viewport topLeft])
  413.         with: originPoint.
  414.     topView window: 
  415.         (0 @ 0 extent: 
  416.             messageView window width @ 
  417.             (messageView window height + answerView window height)).
  418.     topView translateBy:
  419.         (topView displayBox amountToTranslateWithin: Display boundingBox).
  420.     ^topView! !
  421.  
  422. !ListView reorganize!
  423. ('initialize-release' initialize)
  424. ('list access' list list: reset resetAndDisplayView)
  425. ('delimiters' bottomDelimiter bottomDelimiter: noBottomDelimiter noTopDelimiter topDelimiter topDelimiter:)
  426. ('displaying' display displaySelectionBox displayView)
  427. ('deEmphasizing' deEmphasizeView emphasizeView)
  428. ('controller access' defaultControllerClass)
  429. ('display box access' boundingBox)
  430. ('clipping box access' clippingBox)
  431. ('selecting' deselect findSelection: isSelectionBoxClipped maximumSelection minimumSelection moveSelectionBox: selection selectionBox selectionBoxOffset)
  432. ('updating' update:)
  433. ('private' computeCompositionOrigin positionList wrappingBox)
  434. ('scrolling hacks' displayScrollBar displayScrollMarker scrollBarInset)
  435. !
  436.  
  437.  
  438.  
  439. !ListView methodsFor: 'displaying'!
  440.  
  441. displayView
  442.     "Also display the scrollBar and the scrollBar marker
  443.     BH - 14 March 1990"
  444.     self clearInside.
  445.     list displayOn: Display.
  446.     self displaySelectionBox.
  447.     self displayScrollBar.
  448.     self displayScrollMarker! !
  449.  
  450. !ListView methodsFor: 'clipping box access'!
  451.  
  452. clippingBox
  453.     "Answer the rectangle in which the model can be displayed--this
  454.     is the insetDisplayBox inset by the height of a line for an item."
  455.     "also inset by the scrollBar inset
  456.     BH - 14 March 1990"
  457.  
  458.     ^(self insetDisplayBox insetBy: 
  459.         (Rectangle
  460.             left: 0
  461.             right: 0
  462.             top: 0
  463.             bottom: self insetDisplayBox height \\ list lineGrid)) insetBy: self scrollBarInset! !
  464.  
  465. !ListView methodsFor: 'scrolling hacks'!
  466.  
  467. displayScrollBar
  468.     "display the scroll bar
  469.     BH - 14 March 1990"
  470.     controller scrollBar displayOn: Display!
  471.  
  472. displayScrollMarker
  473.     "display the scrollBar marker
  474.     BH - 14 March 1990"
  475.     controller marker displayOn: Display.
  476.     controller moveMarker!
  477.  
  478. scrollBarInset
  479.     "return the scroll bar inset
  480.     BH - 14 March 1990"
  481.     ^ 0@0 corner: self controller scrollBarWidth@0! !
  482.  
  483.  
  484. !ScrollController class methodsFor: 'class initialization'!
  485.  
  486. initialize
  487.     "ScrollController initialize"
  488.     "BH - 14 March 1990"
  489.     ScrollBarWidth _ 15! !
  490.  
  491. !ScrollController class methodsFor: 'scrolling hacks'!
  492.  
  493. scrollBarWidth
  494.     "BH - 14 March 1990"
  495.     ^ ScrollBarWidth! !
  496. ScrollController initialize!
  497.  
  498.  
  499. !ParagraphEditor methodsFor: 'scrolling'!
  500.  
  501. oldscrollAmount 
  502.     ^sensor cursorPoint y - scrollBar top!
  503.  
  504. scrollAmount 
  505.     ^super scrollAmount! !
  506.  
  507. !ParagraphEditor methodsFor: 'menu messages'!
  508.  
  509. cancel
  510.     "Restore the text of the paragraph to be the text saved since initialization or
  511.     the last accept."
  512.  
  513.     self controlTerminate.
  514.     UndoSelection _ paragraph text.
  515.     view clearInside.
  516.     view displayScrollBar.
  517.     view displayScrollMarker.
  518.     self changeParagraph: (paragraph text: initialText).
  519.     paragraph displayOn: Display.
  520.     self scrollToTop.
  521.     self controlInitialize! !
  522.  
  523. !Controller reorganize!
  524. ('initialize-release' initialize release)
  525. ('model access' model model:)
  526. ('view access' view view:)
  527. ('sensor access' sensor sensor:)
  528. ('basic control sequence' controlInitialize controlLoop controlTerminate startUp)
  529. ('control defaults' controlActivity controlToNextLevel isControlActive isControlWanted)
  530. ('cursor' centerCursorInView viewHasCursor)
  531. ('scrolling hacks' marker moveMarker scrollBar scrollBarWidth)
  532. !
  533.  
  534.  
  535.  
  536. !Controller methodsFor: 'scrolling hacks'!
  537.  
  538. marker
  539.     ^ Form extent: 0@0!
  540.  
  541. moveMarker
  542.     ^ self!
  543.  
  544. scrollBar
  545.     ^ Form extent: 0@0!
  546.  
  547. scrollBarWidth
  548.     ^ 0! !
  549.  
  550.  
  551. !TextEditor methodsFor: 'scrolling'!
  552.  
  553. oldscrollAmount
  554.     | lineLength | 
  555.     lineLength _ paragraph lineLength.
  556.     lineLength <= 1 ifTrue: [^lineLength].
  557.     ^lineLength - 1 min: (((super scrollAmount) asFloat 
  558.                 / paragraph lineGrid asFloat) truncated max: 1)!
  559.  
  560. scrollAbsolute
  561.     "New cursor"
  562.     "BH - 12 October 1990"
  563.  
  564.     | oldMarker delta newMarkerRegion oldCursorY cursorY offsetY |
  565.     self changeCursor: Cursor scroll.
  566.     oldCursorY _ marker center y.
  567.     self canScroll & sensor anyButtonPressed ifTrue:
  568.         [[sensor anyButtonPressed] whileTrue:
  569.             [oldMarker _ marker copy.
  570.             cursorY _ sensor cursorPoint y.
  571.             delta _ ((marker center y - cursorY) asFloat / scrollBar inside height asFloat 
  572.                         * (paragraph textSize max: 1) asFloat) truncated.
  573.             (oldCursorY - cursorY) * delta <= 0 ifTrue: [delta _ 0].
  574.             self scrollView: delta.
  575.             oldCursorY _ cursorY.
  576.             newMarkerRegion _ self computeMarkerRegion.
  577.             offsetY _ (((paragraph lines at: 1) - 1) asFloat 
  578.                             / (paragraph textSize max: 1) asFloat 
  579.                                 * scrollBar inside height asFloat) rounded 
  580.                                     min: scrollBar inside height - newMarkerRegion height. 
  581.             marker region: (marker left@(scrollBar inside top + offsetY) extent: newMarkerRegion corner).
  582.             (oldMarker areasOutside: marker), (marker areasOutside: oldMarker) do:
  583.                 [:region | Display fill: region rule: Form reverse mask: Form gray]].
  584.         scrollBar display.
  585.         self moveMarker]!
  586.  
  587. scrollDown
  588.     "Different cursor, continuous scrolling"
  589.     "BH - 12 October 1990"
  590.  
  591.     self canScroll
  592.         ifTrue: 
  593.             [self changeCursor: Cursor up.
  594.             self scrollViewDown.
  595.             self moveMarker]!
  596.  
  597. scrollUp
  598.     "Different cursor, continuous scrolling"
  599.     "BH - 12 October 1990"
  600.  
  601.     self canScroll
  602.         ifTrue: 
  603.             [self changeCursor: Cursor down.
  604.             self scrollViewUp.
  605.             self moveMarker]! !
  606.  
  607. !TextEditor methodsFor: 'menu messages'!
  608.  
  609. cancel
  610.     "Restore the text of the paragraph to be the text saved since initialization or
  611.     the last accept."
  612.  
  613.     self controlTerminate.
  614.     UndoSelection _ paragraph text.
  615.     view clearInside.
  616.     view displayScrollBar.
  617.     view displayScrollMarker.
  618.     paragraph resetState.
  619.     self changeCompositor: (paragraph text: initialText).
  620.     paragraph displayOn: Display.
  621.     self scrollToTop.
  622.     self controlInitialize! !
  623.  
  624.